package aa.maven.me_reptile.base;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2016/12/22.
 *
 * @author zlf
 */
public class HTMLResourceUtil {

    /**
     * 解析内容
     *
     * @param map	解析规则
     * @param text  解析的代码
     * @return
     */
    public static List<String> parseHtmlSourceText(Map<String,String> map,String text){
        List<String> ret=new ArrayList<>();
        Document doc = Jsoup.parse(text);
        for(String sel:map.keySet()){
            Elements links = doc.select(sel);
            for(Element element:links){
                String value=element.attr(map.get(sel));
                ret.add(value);
            }
        }
        return ret;
    }

    /**
     * 根据Id获取制定属性类容
     * @param text 解析的文本
     * @param id	根据元素的Id获取元素
     * @param attrName	要获取的属性值
     * @return
     */
    public static String parseHtmlSourceById(String text,String id,String attrName){
        Document doc = Jsoup.parse(text);
        Element elementById = doc.getElementById(id);
        return elementById.attr(attrName);
    }
    /**
     * 根据id获取元素内容
     * @param text	解析的文本
     * @param id	根据元素的Id获取元素
     * @return
     */
    public static String parseHtmlSourceById(String text,String id){
        Document doc = Jsoup.parse(text);
        Element elementById = doc.getElementById(id);
        return elementById.html();
    }
    /**
     * 根据制定属性和值获取该元素的制定属性
     * @param text	解析的文本
     * @param attrName	元素名字
     * @param value	包含的内容
     * @return
     */
    public static List<String> parseHtmlSourceDIVByAttrNameContaining(String text,String attrName,String value){
        List<String> ret=new ArrayList<>();
        Document doc = Jsoup.parse(text);
        Elements elementsByAttribute = doc.getElementsByAttributeValueContaining(attrName, value);
        for(Element elem:elementsByAttribute){
            ret.add(elem.html());
        }
        return ret;
    }

    /**
     * 根据元素内容匹配
     *
     * @param text
     * @param value 元素内容
     * @param getAttr	获取元素属性
     * @return
     */
    public static List<String> parseHtmlSourceByValue(String text,String value,String getAttr){
        Document doc = Jsoup.parse(text);
        Elements elementsContainingText = doc.getAllElements();
        return parseHtmlSourceByValue(elementsContainingText, value, getAttr);
    }
    private static List<String> parseHtmlSourceByValue(Elements elements,String value,String getAttr){
        List<String> ret=new ArrayList<>();
        for(Element elem:elements){
            Elements childrenElements=elem.children();
            if(childrenElements.size()>0){
                parseHtmlSourceByValue(childrenElements, value, getAttr);
            }else{
                String html = elem.html();
                if(value.equals(html.trim())){
                    ret.add(elem.attr(getAttr));
                }
            }
        }

        return ret;
    }
    /**
     * 根据class值获取DIV指定属性值
     * @param text	解析的文本
     * @param classValue class值
     * @return
     */
    public static List<String> parseHtmlSourceDIVByClass(String text,String classValue){
        List<String> ret=new ArrayList<>();
        Document doc = Jsoup.parse(text);
        Elements elementsByClass = doc.getElementsByClass(classValue);
        for(Element elem:elementsByClass){
            ret.add(elem.html());
        }
        return ret;
    }

}
